Expresión regular, también conocida como regex, regexp o expresión racional, es una secuencia de caracteres que forma un patrón de búsqueda, principalmente utilizada para la búsqueda de patrones de cadenas de caracteres u operaciones de sustituciones.
Las expresiones regulares se construyen utilizando los operadores unión, concatenación y clausura de Kleene.
La clausura de Kleene : es una operación que se aplica sobre un conjunto de cadenas de caracteres o un conjunto de símbolos o caracteres, y representa el conjunto de las cadenas que se pueden formar tomando cualquier número de cadenas del conjunto inicial, posiblemente con repeticiones, y concatenados entre sí.
Un Cuantificador que precede a un carácter cuantifica las veces que este carácter puede aparecer.
?
El carácter que precede puede aparecer como mucho una vez.+
El carácter que le precede debe aparecer al menos una vez.*
El carácter que le precede puede aparecer cero, una, o más veces.{}
Las llaves juegan el papel de meta caracteres, para que cumplan su funcionalidad deben estar después de la expresión regular y encierran uno o varios números.
{n}
Indica que coincide n veces.{n,}
Indica que coincide más n veces.{,n}
Indica que coincide hasta n veces.{n,m}
Indica que coincide más n veces y menos de m veces.$
El signo de dólar representa el final de la cadena de caracteres o el final de la línea.
^
El acento representa el inicio de la cadena.
()
Los paréntesis son usados para la aplicación de operadores sobre más de un carácter.
[]
Los corchetes agrupan caracteres en grupos o clases. Son útiles cuando es necesario buscar uno de un grupo de caracteres.
[a-z]
Especifica un rango de caracteres.[^.... ]
Lista de caracteres excluidos|
Una barra vertical separa las alternativas. Realiza el papel de o.
.
El punto busca cualquier carácter sin incluir los saltos de línea.
Se utiliza para escapar el siguiente carácter de la expresión de búsqueda de forma que este adquiera un significado especial o deje de tenerlo.
\a
— Representa una “campana” o “beep” que se produce al imprimir este carácter.\e
— Representa la tecla “Esc” o “Escape”
\x
— Se utiliza para representar caracteres ASCII o ANSI si conoce su código. De esta forma, si se busca el símbolo de derechos de autor y la fuente en la que se busca utiliza el conjunto de caracteres Latin-1 es posible encontrarlo utilizando “9”.\d
— Representa un dígito del 0 al 9.\w
— Representa cualquier carácter alfanumérico.\s
— Representa un espacio en blanco.\D
— Representa cualquier carácter que no sea un dígito del 0 al 9.\W
— Representa cualquier carácter no alfanumérico.\S
— Representa cualquier carácter que no sea un espacio en blanco.\A
— Representa el inicio de la cadena. No un carácter sino una posición.\Z
— Representa el final de la cadena. No un carácter sino una posición.\b
— Marca la posición de una palabra limitada por espacios en blanco, puntuación o el inicio/final de una cadena.\B
— Marca la posición entre dos caracteres alfanuméricos o dos no-alfanuméricos.
!
El signo de admiración representa una búsqueda negativa, en otras palabras que no incluya la palabra que especificamos.\t
— Representa un tabulador.\r
— Representa el “retorno de carro” o “regreso al inicio” o sea el lugar en que la línea vuelve a iniciar.\n
— Representa la “nueva línea” el carácter por medio del cual una línea de inicio.\f
— Representa un salto de página\v
— Representa un tabulador vertical[:digit:]
<- Digitos del 0 al 9.[:lower:]
<- Letras en monuscula[:upper:]
<- Letras mayusculas[:alpha:]
<- Caractes alfabeticos[:alnum:]
<- Digitos y caracteres alfanumerico[:punct:]
<- Puntuación[:graph:]
<- Caracter graficos [:alnum:]
y [:punct:]
[:blank:]
<- Caracter en blanco espacio y tabulador[:space:]
<- Caracteres de espacios : espacio, tabulador, nueva linea y otros caracteres de espacio.[:print:]
<- Caracteres imprimibles: [:alnum:]
, [:punct:]
y [:space:]
.library(stringr)
library(XML)
## Warning: package 'XML' was built under R version 3.5.2
library(RCurl)
## Warning: package 'RCurl' was built under R version 3.5.2
## Loading required package: bitops
string <- c("R es el mejor lenguaje", " Es un lenguaje vectorizado",
" Es muy bueno en analítica")
patron <- '(R|lenguaje)'
# Da la posición de las fraces que contienen el patron
grep(pattern = patron, string)
## [1] 1 2
# Extrae las oraciones que contienen el patron
grep(pattern = patron, string, value = T)
## [1] "R es el mejor lenguaje" " Es un lenguaje vectorizado"
# valores logicos
grepl(pattern = patron, string)
## [1] TRUE TRUE FALSE
stringr::str_detect(pattern = patron, string)
## [1] TRUE TRUE FALSE
strsplit(string, patron)
## [[1]]
## [1] "" " es el mejor "
##
## [[2]]
## [1] " Es un " " vectorizado"
##
## [[3]]
## [1] " Es muy bueno en analítica"
stringr::str_split(string, patron)
## [[1]]
## [1] "" " es el mejor " ""
##
## [[2]]
## [1] " Es un " " vectorizado"
##
## [[3]]
## [1] " Es muy bueno en analítica"
stringr::str_locate(string , patron)
## start end
## [1,] 1 1
## [2,] 8 15
## [3,] NA NA
stringr::str_locate_all(string , patron)
## [[1]]
## start end
## [1,] 1 1
## [2,] 15 22
##
## [[2]]
## start end
## [1,] 8 15
##
## [[3]]
## start end
# Extraer solo las primeras coincidencias
regmatches(string, regexpr(patron, string))
## [1] "R" "lenguaje"
#Extraer todas las conincidencias
regmatches(string, gregexpr(patron, string))
## [[1]]
## [1] "R" "lenguaje"
##
## [[2]]
## [1] "lenguaje"
##
## [[3]]
## character(0)
# Extraer solo las primeras coincidencias
stringr::str_extract(string , patron)
## [1] "R" "lenguaje" NA
# Extraer solo las primeras coincidencias en una lista
stringr::str_extract_all(string , patron)
## [[1]]
## [1] "R" "lenguaje"
##
## [[2]]
## [1] "lenguaje"
##
## [[3]]
## character(0)
# Extraer solo las primeras coincidencias en una matriz
stringr::str_extract_all(string , patron, simplify = T)
## [,1] [,2]
## [1,] "R" "lenguaje"
## [2,] "lenguaje" ""
## [3,] "" ""
# Reemplaza la primera coincidencia
sub(patron, c("python"), string)
## [1] "python es el mejor lenguaje" " Es un python vectorizado"
## [3] " Es muy bueno en analítica"
# Reemplaza todas las coincidencias
gsub(patron, c("python"), string)
## [1] "python es el mejor python" " Es un python vectorizado"
## [3] " Es muy bueno en analítica"
# Reemplaza la primera coincidencia
stringr::str_replace(string, patron, "python")
## [1] "python es el mejor lenguaje" " Es un python vectorizado"
## [3] " Es muy bueno en analítica"
# Reemplaza todas las coincidencias
stringr::str_replace_all(string, patron, "python")
## [1] "python es el mejor python" " Es un python vectorizado"
## [3] " Es muy bueno en analítica"
Supongamos que se ha recopilado una serie de nombres y número de telefonos de los personajes de ficcion de los “simpson”. La proposito es extrarer los nombres y los numeros y ponerlos en un data frame.
hileras <- "555-1230Moe Szyslak(636) 555-0113Burns, C. Montgomery555-6542Rev. Timothy Lovejoy555 8904Ned Flander636-555-3226Simpson, Homer5543642Dr. Julius Hibbert"
# Estraer información
# str_extract_all <- Extrae porciones de texto del string
# unlist <- para que no lo retorne como un lista
nombre <- unlist(str_extract_all(hileras, "[[:alpha:]., ]{2,}"))
nombre
## [1] "Moe Szyslak" "Burns, C. Montgomery" "Rev. Timothy Lovejoy"
## [4] "Ned Flander" "Simpson, Homer" "Dr. Julius Hibbert"
#
telefono <- unlist(str_extract_all(hileras, "\\(?(\\d{3})?\\)?(-| )?\\d{3}(-| )?\\d{4}"))
telefono
## [1] "555-1230" "(636) 555-0113" "555-6542" "555 8904"
## [5] "636-555-3226" "5543642"
data.frame(Nombre = nombre, Telefono = telefono)
## Nombre Telefono
## 1 Moe Szyslak 555-1230
## 2 Burns, C. Montgomery (636) 555-0113
## 3 Rev. Timothy Lovejoy 555-6542
## 4 Ned Flander 555 8904
## 5 Simpson, Homer 636-555-3226
## 6 Dr. Julius Hibbert 5543642
hilera <- "La 1 Prueba de expresiones- - y. Otras cosas."
str_extract(hilera, "texto")
## [1] NA
str_extract_all(hilera, "^1")
## [[1]]
## character(0)
str_extract_all(hilera, "1")
## [[1]]
## [1] "1"
str_extract_all(hilera, "cosas.$")
## [[1]]
## [1] "cosas."
str_extract_all(hilera, "cosas.")
## [[1]]
## [1] "cosas."
str_extract_all(hilera, "Prueba|Otras")
## [[1]]
## [1] "Prueba" "Otras"
str_extract_all(hilera, "Pru.ba")
## [[1]]
## [1] "Prueba"
str_extract_all(hilera, "Pru[aeiou]ba") # alguno de todos
## [[1]]
## [1] "Prueba"
str_extract_all(hilera, "Pru[a-z]ba")
## [[1]]
## [1] "Prueba"
str_extract_all(hilera, "[ac.t ]")
## [[1]]
## [1] "a" " " " " "a" " " " " " " " " " " "." " " "t" "a" " " "c" "a" "."
str_extract_all(hilera, "Pru[a-h]ba")
## [[1]]
## [1] "Prueba"
str_extract_all(hilera, "[:digit:]")
## [[1]]
## [1] "1"
str_extract_all(hilera, "[[:punct:]]" )
## [[1]]
## [1] "-" "-" "." "."
str_extract_all(hilera, "[[:lower:]]" )
## [[1]]
## [1] "a" "r" "u" "e" "b" "a" "d" "e" "e" "x" "p" "r" "e" "s" "i" "o" "n"
## [18] "e" "s" "y" "t" "r" "a" "s" "c" "o" "s" "a" "s"
hilera1 <- " Texto de prueba para practica"
str_extract(hilera1 ,"Texto de pr[:alpha:]+ba para practica")
## [1] "Texto de prueba para practica"
# Los caracteres especiales se denotan por \\
# Extraer todos los . que aparecen
str_extract_all(hilera, "\\.")
## [[1]]
## [1] "." "."